/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import Dao.AtividadeDao;
import Dao.AtividadeDaoImplJPA;
import Dao.TurmaDao;
import Dao.TurmaDaoImplJPA;
import Pojo.Atividade;
import Pojo.Turma;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author thiago
 */
public class AtividadeDaoImplJPATeste {
    
    public AtividadeDaoImplJPATeste() {
    }
    
    @BeforeClass
    public static void setUpClass() {
    }
    
    @AfterClass
    public static void tearDownClass() {
    }
    
    @Before
    public void setUp() {
    }
    
    @After
    public void tearDown() {
    }
    // TODO add test methods here.
    // The methods must be annotated with annotation @Test. For example:
    //
    // @Test
    // public void hello() {}
    @Test
    public void inserirDaCerto(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        GregorianCalendar data = new GregorianCalendar();
        Atividade atividade = new Atividade(1,"Prova1", "Prova", data, 10.0);
        assertTrue(atividadeDao.inserir(atividade));
    }
    
    @Test
    public void alterarDaCerto(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        Atividade atividade = new Atividade(1,"ProvaX", "Prova", null, 10.0);
        assertTrue(atividadeDao.alterar(atividade));
    }
    
    @Test
    public void alterarDaErrado(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        GregorianCalendar data = new GregorianCalendar();
        Atividade atividade = new Atividade(5,"ProvaX", "Prova", data, 10.0);
        assertFalse(atividadeDao.alterar(atividade));
    }
    
    @Test
    public void removerDaCerto(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        GregorianCalendar data = new GregorianCalendar();
        Atividade atividade = new Atividade(1,"ProvaX", "Prova", data, 10.0);
        assertTrue(atividadeDao.remover(atividade));
    }
    
    @Test
    public void removerDaErrado(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        GregorianCalendar data = new GregorianCalendar();
        Atividade atividade = new Atividade(100,"ProvaX", "Prova", data, 10.0);
        assertFalse(atividadeDao.remover(atividade));
    }
    
    @Test
    public void testarPesquisarPorNomeDaCerto(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        Atividade atividade = new Atividade(2,"ProvaX", "Prova", null, 10.0);
        atividadeDao.inserir(atividade);
        assertNotSame(0,atividadeDao.pesquisarPorNome("ProvaX").size());
    }
    
    @Test
    public void testarPesquisarPorNomeDaErrado(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        assertSame(0,atividadeDao.pesquisarPorNome("alsjdalsdj").size());
    }
    
    @Test
    public void testarPesquisarPorDataDaCerto(){
        String strDate="27/03/2013";
        DateFormat formatter ; 
        Date date ; 
        formatter = new SimpleDateFormat("dd/MM/yyyy");
        try{
            date = (Date) formatter.parse(strDate); 
        }catch(Exception e){
            date = null;
        }
        Calendar cal= Calendar.getInstance();
        cal.setTime(date);
        
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        assertNotSame(0,atividadeDao.pesquisarPorData(cal).size());
    }
    
    @Test
    public void testarPesquisarPorDataDaErrado(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        String strDate="21/05/2013";
        DateFormat formatter ; 
        Date date ; 
        formatter = new SimpleDateFormat("dd/MM/yyyy");
        try{
            date = (Date) formatter.parse(strDate); 
        }catch(Exception e){
            date = null;
        }
        Calendar cal= Calendar.getInstance();
        cal.setTime(date);
        
        assertSame(0,atividadeDao.pesquisarPorData(cal).size());
    }
    
    @Test
    public void testarPesquisarPorTurmaDaCerto(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        TurmaDao turmaDao = new TurmaDaoImplJPA();
        Turma turma = new Turma(1, 2012, 1, "ctan","08:00-10:00", 30,false);
        turmaDao.inserir(turma);
        Atividade atividade = new Atividade("ProvaZ", "Prova", null, 100, turma,null);
        atividadeDao.inserir(atividade);
        assertNotSame(0,atividadeDao.pesquisarPorTurma(turma).size()); 
    }
    
    @Test
    public void testarPesquisarPorTurmaDaErrado(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        TurmaDao turmaDao = new TurmaDaoImplJPA();
        Turma turma = new Turma(5, 2012, 1, "ctan","08:00-10:00", 30,false);
        turmaDao.inserir(turma);
        assertSame(0,atividadeDao.pesquisarPorTurma(turma).size()); 
    }
    
    @Test
    public void testarPesquisarPorIdDaCerto(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        assertNotNull(atividadeDao.pesquisarPorId(2).getId());
    }
    
    @Test
    public void testarPesquisarPorIdDaErrado(){
        AtividadeDao atividadeDao = new AtividadeDaoImplJPA();
        assertNull(atividadeDao.pesquisarPorId(100));
    }
}